#coding: utf-8
#
#   Sistema de Bolão
#   Desenvolvido por Fernando Mariano <fernando.mar16@gmail.com>
#
#	Turma: BSI - 2   
#
#	Uso banco de dados MySQL 
#   Nome da Base de dados: 'bolao'
#
# 	O Sistema ainda não está completo, está funcionando apenas   
#   o módulo de cadastro de Times.
# 
#	O restante dos módulos será desenvolvido com o passar do semestre

from getpass import getpass
import MySQLdb
import md5

#---------------- conexão com banco de dados ---------------------#
conexao = MySQLdb.connect('localhost', 'root', '')
conexao.select_db('bolao')

cursor  = conexao.cursor()
#--------------- fim conexao com banco de dados ------------------#

lista_de_menus     = [['Cadastrar', 'Listar', 'Alterar', 'Excluir']]
lista_de_modulos   = ['Times', 'Jogos', 'Palpites', 'Pontos']

resposta = 's'

usuario = raw_input('Usuario: ')
senha   = getpass('Senha: ' ) #getpass oculta digitos para senhas

while usuario == "" or senha == "":
	
	print "\nPor favor nao deixe o campo USUARIO e SENHA vazios!"
		
	usuario = raw_input('\nUsuario: ')
	senha   = raw_input('Senha: ')

senha = md5.new( senha ).hexdigest() #transforma em md5 a senha
sql = "SELECT * FROM usuario WHERE username = '%s' AND senha = '%s'" %( usuario, senha )

cursor.execute( sql ) #executa sql
resultado_linha  = cursor.rowcount #conta o numero de registros

if resultado_linha == 1: 

	while resposta == 's':

		print "\nEscolha uma das opcoes abaixo\n"
		#cria menu
		for menu in lista_de_menus:
			for i, submenu in enumerate( menu ):
				print i, "-", submenu
				
			
			#pede para digitar a opcao referente ao banco de dados
			escolha_banco_de_dados = int(raw_input("\nQual opcao voce deseja? --> "))
			
			#valida a opção do banco de dados
			while escolha_banco_de_dados < 0 or escolha_banco_de_dados > 3:
						
				print "\nVoce digitou uma opcao invalida!"
				print "Por favor digite apenas numeros de 0 a 3\n"
						
				escolha_banco_de_dados = int(raw_input("Digite a sua escolha: "))
				
				
			#cria submenu
			print "" #pula linha
			for j, modulo in enumerate( lista_de_modulos ):
				print j, "-", modulo
				
			escolha_modulo_sistema = int(raw_input("\nQual a opcao de modulo do sistema? -->"))
				
			#valida se a opcao do banco de dados é valida
			while escolha_modulo_sistema < 0 or escolha_modulo_sistema > 4:
						
				print "\nVoce digitou uma opcao invalida!"
				print "Por favor digite apenas numeros de 0 a 4\n"
						
				escolha_modulo_sistema = int(raw_input("Digite a sua escolha do modulo: "))
					
				
			#verifica qual foi a escolha e em seguida executa sql	
				
			#------------------ times ---------------------#
			#Cadastrar time
			if escolha_banco_de_dados == 0 and escolha_modulo_sistema == 0:
				
				print "\nCadastro de times\n"
				
				nome_time = raw_input('Digite o nome do time para ser cadastrado: ')
				
				#valida se o nome do time foi preenchido
				while nome_time == "":
					print "Não deixe o nome em branco por favor!"
					nome_time = raw_input('Digite o nome do time para ser cadastrado: ')
						
				sql = "INSERT INTO time VALUES (null, '%s', 0)" %nome_time
					
				if cursor.execute( sql ):
					conexao.commit() #realiza as mudanças no banco de dados
					print "Time cadastrado com sucesso!"
					
				else:
					conexao.rollback() #desfaz as mudanças em caso de erro!
					print "Houve erro ao realizar o cadastro, tente novamente!"
				
			#Lista os times cadastrados
			elif escolha_banco_de_dados == 1 and escolha_modulo_sistema == 0:
				print "\nListar Times\n"
								
				cursor.execute("SELECT * FROM time WHERE deletado = 0")
				
				resultados = cursor.fetchall()
				
				print "-----------------------------------------------------" 
				print "%-15s %10s" %( "Codigo", "Nome do Time" )
				print "-----------------------------------------------------" 
				
				for resultado in resultados:
					
					times = {resultado[0]: resultado[1]}
					
					for i, nome in times.iteritems():
						print "%-15d %2s" %( i , nome ) 
					
			#Altera o time
			elif escolha_banco_de_dados == 2 and escolha_modulo_sistema == 0:
				print "\nAlterar Times\n"
				print "ATENCAO!!!"
				print "Voce vai precisar saber o Codigo do Time para altera-lo"
				print "Para descobrir o codigo basta escolher a opcao LISTAR\n"
				
				id_time_alterar   = raw_input("Digite o codigo do time: ")
				nome_time_alterar = raw_input("Digite o novo nome do time: ")
			
				
				while id_time_alterar == "" or nome_time_alterar== "":
					
					print "\nNao deixe o nome em branco por favor!"
					
					id_time_alterar   = raw_input("\nDigite o codigo do time: ")
					nome_time_alterar = raw_input("Digite o novo nome do time: ")
				
				#converto para ficar inteirom, poise o python não valida o um valor inteiro com aspas
				id_time_alterar = int( id_time_alterar )
				
				sql = "UPDATE time SET nome='%s' WHERE id_time = %d" %( nome_time_alterar, id_time_alterar )
				
				if cursor.execute( sql ):
					conexao.commit() #realiza as mudanças no banco de dados
					print "Time alterado com sucesso!"
				else:
					conexao.rollback() #desfaz as mudanças em caso de erro!
					print "Houve erro ao alterar o cadastro, tente novamente!"

			
			#Exclui o time da lista
			elif escolha_banco_de_dados == 3 and escolha_modulo_sistema == 0:
				print "\nExclui Times\n"
				
				print "ATENCAO!!!"
				print "Voce vai precisar saber o Codigo do Time para exclui-lo"
				print "Para descobrir o codigo basta escolher a opcao LISTAR\n"
				
				id_time_excluir = raw_input("Digite o codigo do time: ")
					
				while id_time_excluir == "":			
					print "\nNao deixe o nome em branco por favor!"
					id_time_excluir   = raw_input("\nDigite o codigo do time: ")
					
				#converto para ficar inteirom, poise o python não valida o um valor inteiro com aspas
				id_time_excluir = int( id_time_excluir )
				
				sql = "UPDATE time SET deletado = 1 WHERE id_time = %d" %id_time_excluir
							
				if cursor.execute( sql ):
					conexao.commit() #realiza as mudanças no banco de dados
					print "Time excluido com sucesso!"
				else:
					conexao.rollback() #desfaz as mudanças em caso de erro!
					print "Houve erro ao excluir o registro, tente novamente!"
		
		resposta = raw_input("\nDeseja realizar mais alguma tarefa? [S-Sim/N-Nao] ---> ").lower()
		
		#finaliza o programa
		if resposta[0] != 's':break
else:
	print "Digite o usuario e senha corretamente"
